package cn.tedu.charging.order.mqtt;

import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * MQTT消息的生产者
 * 用来给EMQX 发送消息
 * @Compont @Configuration
 * * @Configuration @Component 区别
 * * 都是让spring 容器管理
 * * Configuration 一个是配置相关的 组件
 * * Component 一个是和具体业务无关 组件
 *
 *  理解 通过 MqttProducer 封装mattClient的好处
 *  让业务方 发送消息的业务 和 具体 怎么发送 解耦
 *
 */
@Slf4j
@Component
public class MqttProducer {

    @Autowired
    private MqttClient mqttClient;

    /**
     * 通过MQTTClient 发送消息给EMQX
     * @param topic 主题
     * @param message
     * @return
     */
    public Boolean send(String topic,String message){
        /**
         * topic 主题
         * payload 消息体 字节数组 message.getBytes() 字符串转换为字节数组
         * qos todo
         * retained todo
         */
        try {
            //发送消息
            mqttClient.publish(topic,message.getBytes(),0,false);
            return true;
        } catch (MqttException e) {
            log.error("消息发送失败：{}，Topic:{},消息：{}",topic,message,e);
        }
        return false;
    }
}
